home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / scheme / pcscheme / geneva / sources.exe / SOURCES / ASM / ASSEMBLY.ASH next >
Encoding:
Text File  |  1992-11-18  |  8.6 KB  |  565 lines

  1. ;* ASSEMBLY.ASH
  2. ;************************************************************************
  3. ;*                                    *
  4. ;*        PC Scheme/Geneva 4.00 Borland TASM code            *
  5. ;*                                    *
  6. ;* (c) 1985-1988 by Texas Instruments, Inc. See COPYRIGHT.TXT        *
  7. ;* (c) 1992 by L. Bartholdi & M. Vuilleumier, University of Geneva    *
  8. ;*                                    *
  9. ;*----------------------------------------------------------------------*
  10. ;*                                    *
  11. ;*        VM Assembly language macro support            *
  12. ;*                                    *
  13. ;*----------------------------------------------------------------------*
  14. ;*                                    *
  15. ;* Created by: John Jensen        Date: 1985            *
  16. ;* Revision history:                            *
  17. ;* - 18 Jun 92:    Renaissance (Borland Compilers, ...)            *
  18. ;*                                    *
  19. ;*                    ``In nomine omnipotentii dei''    *
  20. ;************************************************************************/
  21. ; Register equates
  22. R0    = 0 
  23. R1    = 4 
  24. R2    = 8 
  25. R3    = 12 
  26. R4    = 16 
  27. R5    = 20 
  28. R6    = 24 
  29. R7    = 28 
  30. R8    = 32 
  31. R9    = 36 
  32. R10    = 40 
  33. R11    = 44 
  34. R12    = 48 
  35. R13    = 52 
  36. R14    = 56 
  37. R15    = 60 
  38. R16    = 64 
  39. R17    = 68 
  40. R18    = 72 
  41. R19    = 76 
  42. R20    = 80 
  43. R21    = 84 
  44. R22    = 88 
  45. R23    = 92 
  46. R24    = 96 
  47. R25    = 100 
  48. R26    = 104 
  49. R27    = 108 
  50. R28    = 112 
  51. R29    = 116 
  52. R30    = 120 
  53. R31    = 124 
  54. R32    = 128 
  55. R33    = 132 
  56. R34    = 136 
  57. R35    = 140 
  58. R36    = 144 
  59. R37    = 148 
  60. R38    = 152 
  61. R39    = 156 
  62. R40    = 160 
  63. R41    = 164 
  64. R42    = 168 
  65. R43    = 172 
  66. R44    = 176 
  67. R45    = 180 
  68. R46    = 184 
  69. R47    = 188 
  70. R48    = 192 
  71. R49    = 196 
  72. R50    = 200 
  73. R51    = 204 
  74. R52    = 208 
  75. R53    = 212 
  76. R54    = 216 
  77. R55    = 220 
  78. R56    = 224 
  79. R57    = 228 
  80. R58    = 232 
  81. R59    = 236 
  82. R60    = 240 
  83. R61    = 244 
  84. R62    = 248 
  85. R63    = 252 
  86.     
  87. ;     Instruction macros
  88. MACRO    VM_MOV    dest, src 
  89.     DB    0, dest, src 
  90. ENDM    
  91.     
  92. MACRO    VM_MVC    dest, numb 
  93.     DB    1, dest, numb 
  94. ENDM    
  95.     
  96. MACRO    VM_MVI    dest, val 
  97.     DB    2, dest, val 
  98. ENDM    
  99.     
  100. MACRO    VM_NIL    dest 
  101.     DB    3, dest 
  102. ENDM    
  103.     
  104. MACRO    VM_MVL    dest, entry 
  105.     DB    4, dest, entry 
  106. ENDM    
  107.     
  108. MACRO    VM_MVG dest, src 
  109.     DB    7, dest, src 
  110. ENDM    
  111.     
  112. MACRO    VM_MVF dest, src
  113.     DB    8, dest, src 
  114. ENDM    
  115.     
  116. MACRO    VM_LVs    dest, src, off 
  117. temp_ld    = offset off 
  118. temp_ld    = temp_ld/3 
  119.     DB    9, dest, src, temp_ld 
  120. ENDM    
  121.     
  122. MACRO    VM_LVl    dest, src, off 
  123. temp_ld    = offset off 
  124. temp_ld    = temp_ld/3 
  125.     DB    10, dest, src 
  126.     DW    temp_ld 
  127. ENDM    
  128.     
  129. MACRO    VM_LV_R    dest, src, off 
  130.     DB    11, dest, src, off 
  131. ENDM    
  132.     
  133. MACRO    VM_LG_R    dest, src 
  134.     DB    27, dest, src 
  135. ENDM    
  136.     
  137. MACRO    VM_BIND    const, src
  138.     DB    29, const, src 
  139. ENDM    
  140.     
  141. MACRO    VM_DEF    dest, const 
  142.     DB    31, dest, const 
  143. ENDM    
  144.     
  145. MACRO    VM_DENV    sym, val, env 
  146.     DB    220, sym, val, env 
  147. ENDM    
  148.     
  149. MACRO    VM_CLO    dest, lbl, nargs 
  150.     local    x 
  151.     DB    60, dest 
  152.     DW    lbl-x 
  153.     DB    nargs 
  154. LABEL    x
  155. ENDM    
  156.     
  157. MACRO    VM_LF_R    dest, src
  158.     DB    63, dest, src         ; temporary instruction?
  159. ENDM    
  160.     
  161. MACRO    VM_CAR    dest, src 
  162.     DB    64, dest, src 
  163. ENDM    
  164.     
  165. MACRO    VM_CDR    dest, src 
  166.     DB    65, dest, src 
  167. ENDM    
  168.     
  169. MACRO    VM_CAAR    dest, src 
  170.     DB    66, dest, src 
  171. ENDM    
  172.     
  173. MACRO    VM_CADR    dest, src 
  174.     DB    67, dest, src 
  175. ENDM    
  176.     
  177. MACRO    VM_CDAR    dest, src 
  178.     DB    68, dest, src 
  179. ENDM    
  180.     
  181. MACRO    VM_CDDR    dest, src 
  182.     DB    69, dest, src 
  183. ENDM    
  184.     
  185. MACRO    VM_CAAAR dest, src 
  186.     DB    70, dest, src 
  187. ENDM    
  188.     
  189. MACRO    VM_CAADR dest, src 
  190.     DB    71, dest, src 
  191. ENDM    
  192.     
  193. MACRO    VM_CADAR dest, src 
  194.     DB    72, dest, src 
  195. ENDM    
  196.     
  197. MACRO    VM_CADDR dest, src 
  198.     DB    73, dest, src 
  199. ENDM    
  200.     
  201. MACRO    VM_CDAAR dest, src 
  202.     DB    74, dest, src 
  203. ENDM    
  204.     
  205. MACRO    VM_CDADR dest, src 
  206.     DB    75, dest, src 
  207. ENDM    
  208.     
  209. MACRO    VM_CDDAR dest, src 
  210.     DB    76, dest, src 
  211. ENDM    
  212.     
  213. MACRO    VM_CDDDR dest, src 
  214.     DB    77, dest, src 
  215. ENDM    
  216.     
  217. MACRO    VM_CADDDR dest, src 
  218.     DB    78, dest, src 
  219. ENDM    
  220.     
  221. MACRO    VM_CONS    dest, car, cdr 
  222.     DB    79, dest, car, cdr 
  223. ENDM    
  224.     
  225. MACRO    VM_SCAR    dest, src 
  226.     DB    20, dest, src 
  227. ENDM    
  228.     
  229. MACRO    VM_SCDR    dest, src 
  230.     DB    21, dest, src 
  231. ENDM    
  232.     
  233. MACRO    VM_SVs    dest, src, off 
  234.     DB    17, dest, src, offset off 
  235. ENDM    
  236.     
  237. MACRO    VM_SVl    dest, src, off 
  238.     DB    18, dest, src 
  239.     DW    offset off 
  240. ENDM    
  241.     
  242. MACRO    VM_SV_R    dest, src, off 
  243.     DB    19, dest, src, off 
  244. ENDM    
  245.     
  246. MACRO    VM_JMPs    LABEL 
  247.     DB    32, label-$-1 
  248. ENDM    
  249.     
  250. MACRO    VM_JMPl    LABEL 
  251.     DB    33 
  252.     DW    label-$-2 
  253. ENDM    
  254.     
  255. MACRO    VM_JNLs    reg, LABEL 
  256.     DB    34, reg, label-$-1 
  257. ENDM    
  258.     
  259. MACRO    VM_JNLl    reg, LABEL 
  260.     DB    35, reg 
  261.     DW    label-$-2 
  262. ENDM    
  263.     
  264. MACRO    VM_JTs    reg, LABEL 
  265.     DB    36, reg, label-$-1 
  266. ENDM    
  267.     
  268. MACRO    VM_JTl    reg, LABEL 
  269.     DB    37, reg 
  270.     DW    label-$-2 
  271. ENDM    
  272.     
  273. MACRO    VM_JAs    reg, LABEL 
  274.     DB    38, reg, label-$-1 
  275. ENDM    
  276.     
  277. MACRO    VM_JAl    reg, LABEL 
  278.     DB    39, reg 
  279.     DW    label-$-2 
  280. ENDM    
  281.     
  282. MACRO    VM_JNAs reg, LABEL 
  283.     DB    40, reg, label-$-1 
  284. ENDM    
  285.     
  286. MACRO    VM_JNAl reg, LABEL 
  287.     DB    41, reg 
  288.     DW    label-$-2 
  289. ENDM    
  290.     
  291. MACRO    VM_CALL    label, dl_lvl, dl_heap 
  292.     DB    48 
  293.     DW    label-$-4 
  294.     DB    dl_lvl, dl_heap 
  295. ENDM    
  296.     
  297. MACRO    VM_CLTR    LABEL, dl_lvl, dl_heap 
  298.     DB    49 
  299.     DW    label-$-4 
  300.     DB    dl_lvl, dl_heap 
  301. ENDM    
  302.     
  303. MACRO    VM_CLCC    LABEL, dl_lvl, dl_heap 
  304.     DB    50 
  305.     DW    label-$-4 
  306.     DB    dl_lvl, dl_heap 
  307. ENDM    
  308.     
  309. MACRO    VM_CLCT    LABEL, dl_lvl, dl_heap 
  310.     DB    51 
  311.     DW    label-$-4 
  312.     DB    dl_lvl, dl_heap 
  313. ENDM    
  314.     
  315. MACRO    VM_CLCL    reg, nargs 
  316.     DB    52, reg, nargs 
  317. ENDM    
  318.     
  319. MACRO    VM_CLO?    dest             ; (closure? obj)
  320.     DB    129, dest 
  321. ENDM    
  322.     
  323. MACRO    VM_FLU?    dest             ; (fluid-bound? obj)
  324.     DB    134, dest 
  325. ENDM    
  326.     
  327. MACRO    VM_NUM?    dest            ; (number? obj)
  328.     DB    137, dest
  329. ENDM
  330.  
  331. MACRO    VM_STR?    dest             ; (string? obj)
  332.     DB    143, dest 
  333. ENDM    
  334.     
  335. MACRO    VM_SYM?    dest             ; (symbol? obj)
  336.     DB    144, dest 
  337. ENDM    
  338.     
  339. MACRO    VM_NEG    dest             ; (minus n)
  340.     DB    151, dest 
  341. ENDM    
  342.     
  343. MACRO    VM_A2S    dest             ; (ascii->symbol n)
  344.     DB    160, dest 
  345. ENDM    
  346.     
  347. MACRO    VM_S2A    dest             ; (symbol->ascii sym)
  348.     DB    161, dest 
  349. ENDM    
  350.     
  351. MACRO    VM_ADD    dest, src 
  352.     DB    80, dest, src 
  353. ENDM    
  354.     
  355. MACRO    VM_ADDI    dest, imm 
  356.     DB    81, dest, imm 
  357. ENDM    
  358.     
  359. MACRO    VM_SUB    dest, src 
  360.     DB    82, dest, src 
  361. ENDM    
  362.     
  363. MACRO    VM_MUL    dest, src 
  364.     DB    83, dest, src 
  365. ENDM    
  366.     
  367. MACRO    VM_MULI    dest, imm 
  368.     DB    84, dest, imm 
  369. ENDM    
  370.     
  371. MACRO    VM_DIV    dest, src 
  372.     DB    85, dest, src 
  373. ENDM    
  374.     
  375. MACRO    VM_DIVI    dest, imm 
  376.     DB    86, dest, imm 
  377. ENDM    
  378.     
  379. MACRO    VM_MOD    dest, src 
  380.     DB    88, dest, src 
  381. ENDM    
  382.     
  383. MACRO    VM_JEQs    reg1, reg2, LABEL 
  384.     DB    42, reg1, reg2, label-$-1 
  385. ENDM    
  386.     
  387. MACRO    VM_JEQl    reg1, reg2, LABEL 
  388.     DB    43, reg1, reg2 
  389.     DW    label-$-2 
  390. ENDM    
  391.     
  392. MACRO    VM_JNEs    reg1, reg2, LABEL 
  393.     DB    44, reg1, reg2, label-$-1 
  394. ENDM    
  395.     
  396. MACRO    VM_JNEl    reg1, reg2, LABEL 
  397.     DB    45, reg1, reg2 
  398.     DW    label-$-2 
  399. ENDM    
  400.     
  401. MACRO    VM_EQ    n1, n2 
  402.     DB    94, n1, n2 
  403. ENDM    
  404.     
  405. MACRO    VM_NE    n1, n2 
  406.     DB    97, n1, n2 
  407. ENDM    
  408.     
  409. MACRO    VM_LT    n1, n2 
  410.     DB    92, n1, n2 
  411. ENDM    
  412.     
  413. MACRO    VM_GT    n1, n2 
  414.     DB    95, n1, n2 
  415. ENDM    
  416.     
  417. MACRO    VM_LE    n1, n2 
  418.     DB    93, n1, n2 
  419. ENDM    
  420.     
  421. MACRO    VM_GE    n1, n2 
  422.     DB    96, n1, n2 
  423. ENDM    
  424.     
  425. MACRO    VM_EQZ    dest             ; (=0 n)
  426.     DB    146, dest 
  427. ENDM    
  428.     
  429. MACRO    VM_LTZ    dest             ; (<0 n)
  430.     DB    147, dest 
  431. ENDM    
  432.     
  433. MACRO    VM_GTZ    dest             ; (>0 n)
  434.     DB    148, dest 
  435. ENDM    
  436.     
  437. MACRO    VM_ABS    dest             ; (abs n)
  438.     DB    149, dest 
  439. ENDM    
  440.     
  441. MACRO    VM_FLR    dest             ; (floor n)
  442.     DB    152, dest 
  443. ENDM    
  444.     
  445. MACRO    VM_FLT    dest             ; (float n)
  446.     DB    150, dest 
  447. ENDM    
  448.     
  449. MACRO    VM_GEN    dest             ; (gensym sym)
  450.     DB    162, dest 
  451. ENDM    
  452.     
  453. MACRO    VM_XPLD    dest             ; (explode sym)
  454.     DB    163, dest 
  455. ENDM    
  456.     
  457. MACRO    VM_MPLD    dest             ; (implode list)
  458.     DB    164, dest 
  459. ENDM    
  460.     
  461. MACRO    VM_LEN    dest             ; (length list)
  462.     DB    165, dest 
  463. ENDM    
  464.     
  465. MACRO    VM_LPR    dest             ; (last-pair list)
  466.     DB    166, dest 
  467. ENDM    
  468.     
  469. MACRO    VM_POP    dest 
  470.     DB    24, dest 
  471. ENDM    
  472.     
  473. MACRO    VM_PUSH    dest 
  474.     DB    25, dest 
  475. ENDM    
  476.     
  477. MACRO    VM_DROP    count 
  478.     DB    26, count 
  479. ENDM    
  480.     
  481. MACRO    VM_EXEC    code 
  482.     DB    58, code 
  483. ENDM    
  484.     
  485. MACRO    VM_EXIT                ; restore (return from call)
  486.     DB    59 
  487. ENDM    
  488.     
  489. MACRO    VM_APLY    ftn, arg         ; apply funtion to args
  490.     DB    56, ftn, arg 
  491. ENDM    
  492.     
  493. MACRO    VM_ATR    ftn, arg         ; apply funtion to args-tail recursive
  494.     DB    57, ftn, arg 
  495. ENDM    
  496.     
  497. MACRO    VM_ACB dest             ; allocate code block
  498.     DB    172, dest 
  499. ENDM    
  500.     
  501. MACRO    VM_STC src, cb, offset        ; store constant
  502.     DB    173, src, cb, offset 
  503. ENDM    
  504.     
  505. MACRO    VM_STB    src, cb, offset     ; store code byte
  506.     DB    174, src, cb, offset 
  507. ENDM    
  508.     
  509. MACRO    VM_OPP    file, mode         ; open I/O port
  510.     DB    176, file, mode 
  511. ENDM    
  512.     
  513. MACRO    VM_CLP    file             ; close I/O port
  514.     DB    177, file 
  515. ENDM    
  516.     
  517. MACRO    MV_PR1    dest, port         ; print s-expression
  518.     DB    178, dest, port 
  519. ENDM    
  520.     
  521. MACRO    VM_PRC    dest, port         ; print s-expression
  522.     DB    179, dest, port 
  523. ENDM    
  524.     
  525. MACRO    VM_PRT    dest, port         ; print s-expression
  526.     DB    180, dest, port 
  527. ENDM    
  528.     
  529. MACRO    VM_NL    port             ; print newline
  530.     DB    181, port 
  531. ENDM    
  532.     
  533. MACRO    VM_READ    dest             ; read s-expression
  534.     DB    182, dest 
  535. ENDM    
  536.     
  537. MACRO    VM_FASL    dest             ; fast load
  538.     DB    191, dest 
  539. ENDM    
  540.     
  541. MACRO    VM_HALT    errorcode        ; return to MS-DOS
  542.     DB    248, errorcode
  543. ENDM    
  544.     
  545. MACRO    VM_GC                ; garbage collect
  546.     DB    249 
  547. ENDM    
  548.     
  549. MACRO    VM_TIME                ; display current time
  550.     DB    250 
  551. ENDM    
  552.     
  553. MACRO    VM_SRST                ; scheme-reset
  554.     DB    252 
  555. ENDM    
  556.     
  557. MACRO    VM_CLEARREGS            ; clear registers
  558.     DB    253 
  559. ENDM    
  560.     
  561. MACRO    VM_DBG                ; begin debug mode
  562.     DB    255 
  563. ENDM    
  564.     
  565.